{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting ethnicolr\n",
      "  Using cached ethnicolr-0.8.1-py2.py3-none-any.whl (36.1 MB)\n",
      "Requirement already satisfied: pandas>=1.3.0 in c:\\anaconda\\lib\\site-packages (from ethnicolr) (1.3.0)\n",
      "Collecting tensorflow==2.5.2\n",
      "  Using cached tensorflow-2.5.2-cp38-cp38-win_amd64.whl (422.7 MB)\n",
      "Requirement already satisfied: pytz>=2017.3 in c:\\anaconda\\lib\\site-packages (from pandas>=1.3.0->ethnicolr) (2020.1)\n",
      "Requirement already satisfied: numpy>=1.17.3 in c:\\anaconda\\lib\\site-packages (from pandas>=1.3.0->ethnicolr) (1.19.2)\n",
      "Requirement already satisfied: python-dateutil>=2.7.3 in c:\\anaconda\\lib\\site-packages (from pandas>=1.3.0->ethnicolr) (2.8.1)\n",
      "Requirement already satisfied: wheel~=0.35 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (0.35.1)\n",
      "Requirement already satisfied: termcolor~=1.1.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (1.1.0)\n",
      "Requirement already satisfied: six~=1.15.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (1.15.0)\n",
      "Requirement already satisfied: flatbuffers~=1.12.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (1.12)\n",
      "Requirement already satisfied: keras-nightly~=2.5.0.dev in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (2.5.0.dev2021032900)\n",
      "Requirement already satisfied: absl-py~=0.10 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (0.15.0)\n",
      "Requirement already satisfied: wrapt~=1.12.1 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (1.12.1)\n",
      "Requirement already satisfied: astunparse~=1.6.3 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (1.6.3)\n",
      "Requirement already satisfied: h5py~=3.1.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (3.1.0)\n",
      "Requirement already satisfied: keras-preprocessing~=1.1.2 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (1.1.2)\n",
      "Requirement already satisfied: protobuf>=3.9.2 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (3.19.1)\n",
      "Requirement already satisfied: gast==0.4.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (0.4.0)\n",
      "Requirement already satisfied: google-pasta~=0.2 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (0.2.0)\n",
      "Requirement already satisfied: opt-einsum~=3.3.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (3.3.0)\n",
      "Requirement already satisfied: typing-extensions~=3.7.4 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (3.7.4.3)\n",
      "Requirement already satisfied: tensorflow-estimator<2.6.0,>=2.5.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (2.5.0)\n",
      "Collecting tensorboard~=2.5\n",
      "  Using cached tensorboard-2.7.0-py3-none-any.whl (5.8 MB)\n",
      "Requirement already satisfied: grpcio~=1.34.0 in c:\\anaconda\\lib\\site-packages (from tensorflow==2.5.2->ethnicolr) (1.34.1)\n",
      "Requirement already satisfied: google-auth<3,>=1.6.3 in c:\\anaconda\\lib\\site-packages (from tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (2.3.3)\n",
      "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in c:\\anaconda\\lib\\site-packages (from tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (0.4.6)\n",
      "Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in c:\\anaconda\\lib\\site-packages (from tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (0.6.1)\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in c:\\anaconda\\lib\\site-packages (from tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (2.24.0)\n",
      "Requirement already satisfied: setuptools>=41.0.0 in c:\\anaconda\\lib\\site-packages (from tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (50.3.1.post20201107)\n",
      "Collecting tensorboard-plugin-wit>=1.6.0\n",
      "  Using cached tensorboard_plugin_wit-1.8.0-py3-none-any.whl (781 kB)\n",
      "Requirement already satisfied: werkzeug>=0.11.15 in c:\\anaconda\\lib\\site-packages (from tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (1.0.1)\n",
      "Collecting markdown>=2.6.8\n",
      "  Using cached Markdown-3.3.6-py3-none-any.whl (97 kB)\n",
      "Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\anaconda\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (0.2.8)\n",
      "Requirement already satisfied: rsa<5,>=3.1.4; python_version >= \"3.6\" in c:\\anaconda\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (4.8)\n",
      "Requirement already satisfied: cachetools<5.0,>=2.0.0 in c:\\anaconda\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (4.2.4)\n",
      "Requirement already satisfied: requests-oauthlib>=0.7.0 in c:\\anaconda\\lib\\site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (1.3.0)\n",
      "Requirement already satisfied: chardet<4,>=3.0.2 in c:\\anaconda\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (3.0.4)\n",
      "Requirement already satisfied: idna<3,>=2.5 in c:\\anaconda\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (2.10)\n",
      "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\\anaconda\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (1.25.11)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\anaconda\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (2020.6.20)\n",
      "Collecting importlib-metadata>=4.4; python_version < \"3.10\"\n",
      "  Using cached importlib_metadata-4.8.2-py3-none-any.whl (17 kB)\n",
      "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in c:\\anaconda\\lib\\site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (0.4.8)\n",
      "Requirement already satisfied: oauthlib>=3.0.0 in c:\\anaconda\\lib\\site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (3.1.1)\n",
      "Requirement already satisfied: zipp>=0.5 in c:\\anaconda\\lib\\site-packages (from importlib-metadata>=4.4; python_version < \"3.10\"->markdown>=2.6.8->tensorboard~=2.5->tensorflow==2.5.2->ethnicolr) (3.4.0)\n",
      "Installing collected packages: tensorboard-plugin-wit, importlib-metadata, markdown, tensorboard, tensorflow, ethnicolr\n",
      "  Attempting uninstall: importlib-metadata\n",
      "    Found existing installation: importlib-metadata 2.0.0\n",
      "    Uninstalling importlib-metadata-2.0.0:\n",
      "      Successfully uninstalled importlib-metadata-2.0.0\n",
      "Successfully installed ethnicolr-0.8.1 importlib-metadata-4.8.2 markdown-3.3.6 tensorboard-2.7.0 tensorboard-plugin-wit-1.8.0 tensorflow-2.5.2\n"
     ]
    }
   ],
   "source": [
    "!pip install ethnicolr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import pandas as pd\n",
    "from ethnicolr import census_ln, pred_census_ln\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import re\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.feature_extraction import text\n",
    "from sklearn.metrics import mean_squared_error, confusion_matrix\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
    "from sklearn.linear_model import LinearRegression, LogisticRegression\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.linear_model import SGDRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from ethnicolr import pred_fl_reg_ln, pred_fl_reg_name, pred_fl_reg_ln_five_cat, pred_fl_reg_name_five_cat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=pd.read_csv('data_race_pred.csv',encoding='utf-8')\n",
    "data_for_race_name = pd.read_csv('data_for_race_name.csv',encoding = 'latin1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>id</th>\n",
       "      <th>tweets</th>\n",
       "      <th>name</th>\n",
       "      <th>screen_name</th>\n",
       "      <th>description</th>\n",
       "      <th>img_path</th>\n",
       "      <th>is_female</th>\n",
       "      <th>year_born</th>\n",
       "      <th>race</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>12488</td>\n",
       "      <td>['YKAR, a futuristic sans serif font by @Emmer...</td>\n",
       "      <td>Chad Boyce</td>\n",
       "      <td>djsnipa1</td>\n",
       "      <td>Multimedia Developer, Graphic Designer, DJ, an...</td>\n",
       "      <td>profile pics/60147.jpeg</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1980.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>719703</td>\n",
       "      <td>['In other words, it’s good news about the vac...</td>\n",
       "      <td>Tomato 😷</td>\n",
       "      <td>Tomato</td>\n",
       "      <td>🇭🇰Rise Up!</td>\n",
       "      <td>profile pics/60148.jpeg</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1985.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>749003</td>\n",
       "      <td>['would it be fair to call lil nas x the first...</td>\n",
       "      <td>A ring made from a spoon --- E83.31</td>\n",
       "      <td>IYQbd</td>\n",
       "      <td>Has the kind of luck that turns a professional...</td>\n",
       "      <td>profile pics/60150.jpeg</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1982.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>822540</td>\n",
       "      <td>['@Asmongold ❤️ 🙏', '@Hunter4J @Wario64 bonk',...</td>\n",
       "      <td>parker</td>\n",
       "      <td>parker</td>\n",
       "      <td>gotta go fast</td>\n",
       "      <td>profile pics/60153.jpeg</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1979.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>865071</td>\n",
       "      <td>['@robo_james How about pizza dipped in water ...</td>\n",
       "      <td>Kevin Jones</td>\n",
       "      <td>kevinj</td>\n",
       "      <td>NaN</td>\n",
       "      <td>profile pics/60154.jpeg</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1995.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0      id                                             tweets  \\\n",
       "0           0   12488  ['YKAR, a futuristic sans serif font by @Emmer...   \n",
       "1           1  719703  ['In other words, it’s good news about the vac...   \n",
       "2           2  749003  ['would it be fair to call lil nas x the first...   \n",
       "3           3  822540  ['@Asmongold ❤️ 🙏', '@Hunter4J @Wario64 bonk',...   \n",
       "4           4  865071  ['@robo_james How about pizza dipped in water ...   \n",
       "\n",
       "                                  name screen_name  \\\n",
       "0                           Chad Boyce    djsnipa1   \n",
       "1                             Tomato 😷      Tomato   \n",
       "2  A ring made from a spoon --- E83.31       IYQbd   \n",
       "3                               parker      parker   \n",
       "4                          Kevin Jones      kevinj   \n",
       "\n",
       "                                         description                 img_path  \\\n",
       "0  Multimedia Developer, Graphic Designer, DJ, an...  profile pics/60147.jpeg   \n",
       "1                                         🇭🇰Rise Up!  profile pics/60148.jpeg   \n",
       "2  Has the kind of luck that turns a professional...  profile pics/60150.jpeg   \n",
       "3                                      gotta go fast  profile pics/60153.jpeg   \n",
       "4                                                NaN  profile pics/60154.jpeg   \n",
       "\n",
       "   is_female  year_born  race  \n",
       "0        0.0     1980.0   4.0  \n",
       "1        0.0     1985.0   4.0  \n",
       "2        0.0     1982.0   5.0  \n",
       "3        0.0     1979.0   4.0  \n",
       "4        0.0     1995.0   4.0  "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>fn</th>\n",
       "      <th>ln</th>\n",
       "      <th>screen_name</th>\n",
       "      <th>race</th>\n",
       "      <th>ln1</th>\n",
       "      <th>full_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12488</td>\n",
       "      <td>Chad</td>\n",
       "      <td>Boyce</td>\n",
       "      <td>djsnipa1</td>\n",
       "      <td>4</td>\n",
       "      <td>Boyce</td>\n",
       "      <td>Chad Boyce</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>822540</td>\n",
       "      <td>parker</td>\n",
       "      <td>NaN</td>\n",
       "      <td>parker</td>\n",
       "      <td>4</td>\n",
       "      <td>parker</td>\n",
       "      <td>parker parker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>865071</td>\n",
       "      <td>Kevin</td>\n",
       "      <td>Jones</td>\n",
       "      <td>kevinj</td>\n",
       "      <td>4</td>\n",
       "      <td>Jones</td>\n",
       "      <td>Kevin Jones</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>988211</td>\n",
       "      <td>Joe</td>\n",
       "      <td>Duhamel</td>\n",
       "      <td>jduhamel</td>\n",
       "      <td>4</td>\n",
       "      <td>Duhamel</td>\n",
       "      <td>Joe Duhamel</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1025311</td>\n",
       "      <td>Carrie</td>\n",
       "      <td>Jackson</td>\n",
       "      <td>carebear</td>\n",
       "      <td>4</td>\n",
       "      <td>Jackson</td>\n",
       "      <td>Carrie Jackson</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id      fn       ln screen_name  race      ln1       full_name\n",
       "0    12488    Chad    Boyce    djsnipa1     4    Boyce      Chad Boyce\n",
       "1   822540  parker      NaN      parker     4   parker   parker parker\n",
       "2   865071   Kevin    Jones      kevinj     4    Jones     Kevin Jones\n",
       "3   988211     Joe  Duhamel    jduhamel     4  Duhamel     Joe Duhamel\n",
       "4  1025311  Carrie  Jackson    carebear     4  Jackson  Carrie Jackson"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_for_race_name.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(data)\n",
    "#odf = pred_fl_reg_name(df, 'name')\n",
    "#odf = pred_fl_reg_ln(df, 'name')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['asian', 'hispanic', 'nh_black', 'nh_white']\n"
     ]
    }
   ],
   "source": [
    "df_name = pd.DataFrame(data_for_race_name)\n",
    "odf_name = pred_fl_reg_name(df_name, 'ln1', 'fn')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>fn</th>\n",
       "      <th>ln</th>\n",
       "      <th>screen_name</th>\n",
       "      <th>race_x</th>\n",
       "      <th>ln1</th>\n",
       "      <th>full_name</th>\n",
       "      <th>__name</th>\n",
       "      <th>rowindex</th>\n",
       "      <th>asian_mean</th>\n",
       "      <th>...</th>\n",
       "      <th>hispanic_ub</th>\n",
       "      <th>nh_black_mean</th>\n",
       "      <th>nh_black_std</th>\n",
       "      <th>nh_black_lb</th>\n",
       "      <th>nh_black_ub</th>\n",
       "      <th>nh_white_mean</th>\n",
       "      <th>nh_white_std</th>\n",
       "      <th>nh_white_lb</th>\n",
       "      <th>nh_white_ub</th>\n",
       "      <th>race_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12488</td>\n",
       "      <td>Chad</td>\n",
       "      <td>Boyce</td>\n",
       "      <td>djsnipa1</td>\n",
       "      <td>4</td>\n",
       "      <td>Boyce</td>\n",
       "      <td>Chad Boyce</td>\n",
       "      <td>Boyce Chad</td>\n",
       "      <td>0</td>\n",
       "      <td>0.005127</td>\n",
       "      <td>...</td>\n",
       "      <td>0.002321</td>\n",
       "      <td>0.122594</td>\n",
       "      <td>0.054618</td>\n",
       "      <td>0.040756</td>\n",
       "      <td>0.046307</td>\n",
       "      <td>0.862707</td>\n",
       "      <td>0.059222</td>\n",
       "      <td>0.636156</td>\n",
       "      <td>0.670669</td>\n",
       "      <td>nh_white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>822540</td>\n",
       "      <td>parker</td>\n",
       "      <td>NaN</td>\n",
       "      <td>parker</td>\n",
       "      <td>4</td>\n",
       "      <td>parker</td>\n",
       "      <td>parker parker</td>\n",
       "      <td>Parker Parker</td>\n",
       "      <td>1</td>\n",
       "      <td>0.548525</td>\n",
       "      <td>...</td>\n",
       "      <td>0.011610</td>\n",
       "      <td>0.055902</td>\n",
       "      <td>0.046317</td>\n",
       "      <td>0.006484</td>\n",
       "      <td>0.007841</td>\n",
       "      <td>0.267394</td>\n",
       "      <td>0.144689</td>\n",
       "      <td>0.040245</td>\n",
       "      <td>0.045365</td>\n",
       "      <td>asian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>865071</td>\n",
       "      <td>Kevin</td>\n",
       "      <td>Jones</td>\n",
       "      <td>kevinj</td>\n",
       "      <td>4</td>\n",
       "      <td>Jones</td>\n",
       "      <td>Kevin Jones</td>\n",
       "      <td>Jones Kevin</td>\n",
       "      <td>2</td>\n",
       "      <td>0.069432</td>\n",
       "      <td>...</td>\n",
       "      <td>0.067141</td>\n",
       "      <td>0.189380</td>\n",
       "      <td>0.084933</td>\n",
       "      <td>0.049359</td>\n",
       "      <td>0.061402</td>\n",
       "      <td>0.410355</td>\n",
       "      <td>0.149854</td>\n",
       "      <td>0.126408</td>\n",
       "      <td>0.167937</td>\n",
       "      <td>nh_white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>988211</td>\n",
       "      <td>Joe</td>\n",
       "      <td>Duhamel</td>\n",
       "      <td>jduhamel</td>\n",
       "      <td>4</td>\n",
       "      <td>Duhamel</td>\n",
       "      <td>Joe Duhamel</td>\n",
       "      <td>Duhamel Joe</td>\n",
       "      <td>3</td>\n",
       "      <td>0.110163</td>\n",
       "      <td>...</td>\n",
       "      <td>0.037840</td>\n",
       "      <td>0.069218</td>\n",
       "      <td>0.064496</td>\n",
       "      <td>0.006326</td>\n",
       "      <td>0.007848</td>\n",
       "      <td>0.524325</td>\n",
       "      <td>0.186905</td>\n",
       "      <td>0.129035</td>\n",
       "      <td>0.181556</td>\n",
       "      <td>nh_white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1025311</td>\n",
       "      <td>Carrie</td>\n",
       "      <td>Jackson</td>\n",
       "      <td>carebear</td>\n",
       "      <td>4</td>\n",
       "      <td>Jackson</td>\n",
       "      <td>Carrie Jackson</td>\n",
       "      <td>Jackson Carrie</td>\n",
       "      <td>4</td>\n",
       "      <td>0.002667</td>\n",
       "      <td>...</td>\n",
       "      <td>0.003010</td>\n",
       "      <td>0.352035</td>\n",
       "      <td>0.134412</td>\n",
       "      <td>0.061568</td>\n",
       "      <td>0.089768</td>\n",
       "      <td>0.636572</td>\n",
       "      <td>0.133700</td>\n",
       "      <td>0.297595</td>\n",
       "      <td>0.350881</td>\n",
       "      <td>nh_white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2548</th>\n",
       "      <td>3196361888</td>\n",
       "      <td>Shortie</td>\n",
       "      <td>NaN</td>\n",
       "      <td>x3_adrii</td>\n",
       "      <td>1</td>\n",
       "      <td>Shortie</td>\n",
       "      <td>Shortie Shortie</td>\n",
       "      <td>Shortie Shortie</td>\n",
       "      <td>2548</td>\n",
       "      <td>0.009531</td>\n",
       "      <td>...</td>\n",
       "      <td>0.003467</td>\n",
       "      <td>0.583619</td>\n",
       "      <td>0.168950</td>\n",
       "      <td>0.132577</td>\n",
       "      <td>0.183240</td>\n",
       "      <td>0.398002</td>\n",
       "      <td>0.167574</td>\n",
       "      <td>0.053985</td>\n",
       "      <td>0.086640</td>\n",
       "      <td>nh_black</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2549</th>\n",
       "      <td>3323699762</td>\n",
       "      <td>Ben</td>\n",
       "      <td>NaN</td>\n",
       "      <td>sp4srhxkan</td>\n",
       "      <td>4</td>\n",
       "      <td>Ben</td>\n",
       "      <td>Ben Ben</td>\n",
       "      <td>Ben Ben</td>\n",
       "      <td>2549</td>\n",
       "      <td>0.986288</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000113</td>\n",
       "      <td>0.001317</td>\n",
       "      <td>0.001481</td>\n",
       "      <td>0.000196</td>\n",
       "      <td>0.000196</td>\n",
       "      <td>0.011780</td>\n",
       "      <td>0.012389</td>\n",
       "      <td>0.001821</td>\n",
       "      <td>0.002043</td>\n",
       "      <td>asian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2550</th>\n",
       "      <td>3352812676</td>\n",
       "      <td>Meagan</td>\n",
       "      <td>Lovely</td>\n",
       "      <td>meaganislovely</td>\n",
       "      <td>4</td>\n",
       "      <td>Lovely</td>\n",
       "      <td>Meagan Lovely</td>\n",
       "      <td>Lovely Meagan</td>\n",
       "      <td>2550</td>\n",
       "      <td>0.033825</td>\n",
       "      <td>...</td>\n",
       "      <td>0.013498</td>\n",
       "      <td>0.318899</td>\n",
       "      <td>0.151403</td>\n",
       "      <td>0.061098</td>\n",
       "      <td>0.066698</td>\n",
       "      <td>0.602811</td>\n",
       "      <td>0.147331</td>\n",
       "      <td>0.221443</td>\n",
       "      <td>0.270109</td>\n",
       "      <td>nh_white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2551</th>\n",
       "      <td>3924536853</td>\n",
       "      <td>Megan</td>\n",
       "      <td>Schuitema</td>\n",
       "      <td>meganschuitema</td>\n",
       "      <td>4</td>\n",
       "      <td>Schuitema</td>\n",
       "      <td>Megan Schuitema</td>\n",
       "      <td>Schuitema Megan</td>\n",
       "      <td>2551</td>\n",
       "      <td>0.043229</td>\n",
       "      <td>...</td>\n",
       "      <td>0.048242</td>\n",
       "      <td>0.251637</td>\n",
       "      <td>0.119579</td>\n",
       "      <td>0.079111</td>\n",
       "      <td>0.080187</td>\n",
       "      <td>0.567722</td>\n",
       "      <td>0.130493</td>\n",
       "      <td>0.276475</td>\n",
       "      <td>0.304835</td>\n",
       "      <td>nh_white</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2552</th>\n",
       "      <td>4281628276</td>\n",
       "      <td>Joseph</td>\n",
       "      <td>Aragunde</td>\n",
       "      <td>thomasaragu</td>\n",
       "      <td>4</td>\n",
       "      <td>Aragunde</td>\n",
       "      <td>Joseph Aragunde</td>\n",
       "      <td>Aragunde Joseph</td>\n",
       "      <td>2552</td>\n",
       "      <td>0.041777</td>\n",
       "      <td>...</td>\n",
       "      <td>0.019125</td>\n",
       "      <td>0.119044</td>\n",
       "      <td>0.073153</td>\n",
       "      <td>0.020028</td>\n",
       "      <td>0.022905</td>\n",
       "      <td>0.746627</td>\n",
       "      <td>0.096714</td>\n",
       "      <td>0.432007</td>\n",
       "      <td>0.468800</td>\n",
       "      <td>nh_white</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2553 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         user_id       fn         ln     screen_name  race_x        ln1  \\\n",
       "0          12488     Chad      Boyce        djsnipa1       4      Boyce   \n",
       "1         822540   parker        NaN          parker       4     parker   \n",
       "2         865071    Kevin      Jones          kevinj       4      Jones   \n",
       "3         988211      Joe    Duhamel        jduhamel       4    Duhamel   \n",
       "4        1025311   Carrie    Jackson        carebear       4    Jackson   \n",
       "...          ...      ...        ...             ...     ...        ...   \n",
       "2548  3196361888  Shortie        NaN        x3_adrii       1    Shortie   \n",
       "2549  3323699762      Ben        NaN      sp4srhxkan       4        Ben   \n",
       "2550  3352812676   Meagan     Lovely  meaganislovely       4     Lovely   \n",
       "2551  3924536853    Megan  Schuitema  meganschuitema       4  Schuitema   \n",
       "2552  4281628276   Joseph   Aragunde     thomasaragu       4   Aragunde   \n",
       "\n",
       "            full_name           __name  rowindex  asian_mean  ...  \\\n",
       "0          Chad Boyce       Boyce Chad         0    0.005127  ...   \n",
       "1       parker parker    Parker Parker         1    0.548525  ...   \n",
       "2         Kevin Jones      Jones Kevin         2    0.069432  ...   \n",
       "3         Joe Duhamel      Duhamel Joe         3    0.110163  ...   \n",
       "4      Carrie Jackson   Jackson Carrie         4    0.002667  ...   \n",
       "...               ...              ...       ...         ...  ...   \n",
       "2548  Shortie Shortie  Shortie Shortie      2548    0.009531  ...   \n",
       "2549          Ben Ben          Ben Ben      2549    0.986288  ...   \n",
       "2550    Meagan Lovely    Lovely Meagan      2550    0.033825  ...   \n",
       "2551  Megan Schuitema  Schuitema Megan      2551    0.043229  ...   \n",
       "2552  Joseph Aragunde  Aragunde Joseph      2552    0.041777  ...   \n",
       "\n",
       "      hispanic_ub  nh_black_mean  nh_black_std  nh_black_lb  nh_black_ub  \\\n",
       "0        0.002321       0.122594      0.054618     0.040756     0.046307   \n",
       "1        0.011610       0.055902      0.046317     0.006484     0.007841   \n",
       "2        0.067141       0.189380      0.084933     0.049359     0.061402   \n",
       "3        0.037840       0.069218      0.064496     0.006326     0.007848   \n",
       "4        0.003010       0.352035      0.134412     0.061568     0.089768   \n",
       "...           ...            ...           ...          ...          ...   \n",
       "2548     0.003467       0.583619      0.168950     0.132577     0.183240   \n",
       "2549     0.000113       0.001317      0.001481     0.000196     0.000196   \n",
       "2550     0.013498       0.318899      0.151403     0.061098     0.066698   \n",
       "2551     0.048242       0.251637      0.119579     0.079111     0.080187   \n",
       "2552     0.019125       0.119044      0.073153     0.020028     0.022905   \n",
       "\n",
       "      nh_white_mean  nh_white_std  nh_white_lb  nh_white_ub    race_y  \n",
       "0          0.862707      0.059222     0.636156     0.670669  nh_white  \n",
       "1          0.267394      0.144689     0.040245     0.045365     asian  \n",
       "2          0.410355      0.149854     0.126408     0.167937  nh_white  \n",
       "3          0.524325      0.186905     0.129035     0.181556  nh_white  \n",
       "4          0.636572      0.133700     0.297595     0.350881  nh_white  \n",
       "...             ...           ...          ...          ...       ...  \n",
       "2548       0.398002      0.167574     0.053985     0.086640  nh_black  \n",
       "2549       0.011780      0.012389     0.001821     0.002043     asian  \n",
       "2550       0.602811      0.147331     0.221443     0.270109  nh_white  \n",
       "2551       0.567722      0.130493     0.276475     0.304835  nh_white  \n",
       "2552       0.746627      0.096714     0.432007     0.468800  nh_white  \n",
       "\n",
       "[2553 rows x 26 columns]"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "odf_name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "odf_name['race_y'] = odf_name['race_y'].map({\"nh_white\" : 4, \"nh_black\" : 1,\"hispanic\" : 2,\"asian\" : 3})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>fn</th>\n",
       "      <th>ln</th>\n",
       "      <th>screen_name</th>\n",
       "      <th>race_x</th>\n",
       "      <th>ln1</th>\n",
       "      <th>full_name</th>\n",
       "      <th>__name</th>\n",
       "      <th>rowindex</th>\n",
       "      <th>asian_mean</th>\n",
       "      <th>...</th>\n",
       "      <th>hispanic_ub</th>\n",
       "      <th>nh_black_mean</th>\n",
       "      <th>nh_black_std</th>\n",
       "      <th>nh_black_lb</th>\n",
       "      <th>nh_black_ub</th>\n",
       "      <th>nh_white_mean</th>\n",
       "      <th>nh_white_std</th>\n",
       "      <th>nh_white_lb</th>\n",
       "      <th>nh_white_ub</th>\n",
       "      <th>race_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12488</td>\n",
       "      <td>Chad</td>\n",
       "      <td>Boyce</td>\n",
       "      <td>djsnipa1</td>\n",
       "      <td>4</td>\n",
       "      <td>Boyce</td>\n",
       "      <td>Chad Boyce</td>\n",
       "      <td>Boyce Chad</td>\n",
       "      <td>0</td>\n",
       "      <td>0.005127</td>\n",
       "      <td>...</td>\n",
       "      <td>0.002321</td>\n",
       "      <td>0.122594</td>\n",
       "      <td>0.054618</td>\n",
       "      <td>0.040756</td>\n",
       "      <td>0.046307</td>\n",
       "      <td>0.862707</td>\n",
       "      <td>0.059222</td>\n",
       "      <td>0.636156</td>\n",
       "      <td>0.670669</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>822540</td>\n",
       "      <td>parker</td>\n",
       "      <td>NaN</td>\n",
       "      <td>parker</td>\n",
       "      <td>4</td>\n",
       "      <td>parker</td>\n",
       "      <td>parker parker</td>\n",
       "      <td>Parker Parker</td>\n",
       "      <td>1</td>\n",
       "      <td>0.548525</td>\n",
       "      <td>...</td>\n",
       "      <td>0.011610</td>\n",
       "      <td>0.055902</td>\n",
       "      <td>0.046317</td>\n",
       "      <td>0.006484</td>\n",
       "      <td>0.007841</td>\n",
       "      <td>0.267394</td>\n",
       "      <td>0.144689</td>\n",
       "      <td>0.040245</td>\n",
       "      <td>0.045365</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>865071</td>\n",
       "      <td>Kevin</td>\n",
       "      <td>Jones</td>\n",
       "      <td>kevinj</td>\n",
       "      <td>4</td>\n",
       "      <td>Jones</td>\n",
       "      <td>Kevin Jones</td>\n",
       "      <td>Jones Kevin</td>\n",
       "      <td>2</td>\n",
       "      <td>0.069432</td>\n",
       "      <td>...</td>\n",
       "      <td>0.067141</td>\n",
       "      <td>0.189380</td>\n",
       "      <td>0.084933</td>\n",
       "      <td>0.049359</td>\n",
       "      <td>0.061402</td>\n",
       "      <td>0.410355</td>\n",
       "      <td>0.149854</td>\n",
       "      <td>0.126408</td>\n",
       "      <td>0.167937</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>988211</td>\n",
       "      <td>Joe</td>\n",
       "      <td>Duhamel</td>\n",
       "      <td>jduhamel</td>\n",
       "      <td>4</td>\n",
       "      <td>Duhamel</td>\n",
       "      <td>Joe Duhamel</td>\n",
       "      <td>Duhamel Joe</td>\n",
       "      <td>3</td>\n",
       "      <td>0.110163</td>\n",
       "      <td>...</td>\n",
       "      <td>0.037840</td>\n",
       "      <td>0.069218</td>\n",
       "      <td>0.064496</td>\n",
       "      <td>0.006326</td>\n",
       "      <td>0.007848</td>\n",
       "      <td>0.524325</td>\n",
       "      <td>0.186905</td>\n",
       "      <td>0.129035</td>\n",
       "      <td>0.181556</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1025311</td>\n",
       "      <td>Carrie</td>\n",
       "      <td>Jackson</td>\n",
       "      <td>carebear</td>\n",
       "      <td>4</td>\n",
       "      <td>Jackson</td>\n",
       "      <td>Carrie Jackson</td>\n",
       "      <td>Jackson Carrie</td>\n",
       "      <td>4</td>\n",
       "      <td>0.002667</td>\n",
       "      <td>...</td>\n",
       "      <td>0.003010</td>\n",
       "      <td>0.352035</td>\n",
       "      <td>0.134412</td>\n",
       "      <td>0.061568</td>\n",
       "      <td>0.089768</td>\n",
       "      <td>0.636572</td>\n",
       "      <td>0.133700</td>\n",
       "      <td>0.297595</td>\n",
       "      <td>0.350881</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id      fn       ln screen_name  race_x      ln1       full_name  \\\n",
       "0    12488    Chad    Boyce    djsnipa1       4    Boyce      Chad Boyce   \n",
       "1   822540  parker      NaN      parker       4   parker   parker parker   \n",
       "2   865071   Kevin    Jones      kevinj       4    Jones     Kevin Jones   \n",
       "3   988211     Joe  Duhamel    jduhamel       4  Duhamel     Joe Duhamel   \n",
       "4  1025311  Carrie  Jackson    carebear       4  Jackson  Carrie Jackson   \n",
       "\n",
       "           __name  rowindex  asian_mean  ...  hispanic_ub  nh_black_mean  \\\n",
       "0      Boyce Chad         0    0.005127  ...     0.002321       0.122594   \n",
       "1   Parker Parker         1    0.548525  ...     0.011610       0.055902   \n",
       "2     Jones Kevin         2    0.069432  ...     0.067141       0.189380   \n",
       "3     Duhamel Joe         3    0.110163  ...     0.037840       0.069218   \n",
       "4  Jackson Carrie         4    0.002667  ...     0.003010       0.352035   \n",
       "\n",
       "   nh_black_std  nh_black_lb  nh_black_ub  nh_white_mean  nh_white_std  \\\n",
       "0      0.054618     0.040756     0.046307       0.862707      0.059222   \n",
       "1      0.046317     0.006484     0.007841       0.267394      0.144689   \n",
       "2      0.084933     0.049359     0.061402       0.410355      0.149854   \n",
       "3      0.064496     0.006326     0.007848       0.524325      0.186905   \n",
       "4      0.134412     0.061568     0.089768       0.636572      0.133700   \n",
       "\n",
       "   nh_white_lb  nh_white_ub  race_y  \n",
       "0     0.636156     0.670669       4  \n",
       "1     0.040245     0.045365       3  \n",
       "2     0.126408     0.167937       4  \n",
       "3     0.129035     0.181556       4  \n",
       "4     0.297595     0.350881       4  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "odf_name.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6948687818253035"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "accuracy_score(odf_name[\"race_x\"], odf_name[\"race_y\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           1       0.14      0.16      0.15       219\n",
      "           2       0.13      0.13      0.13       126\n",
      "           3       0.06      0.14      0.09        77\n",
      "           4       0.85      0.80      0.83      2131\n",
      "\n",
      "    accuracy                           0.69      2553\n",
      "   macro avg       0.30      0.31      0.30      2553\n",
      "weighted avg       0.73      0.69      0.71      2553\n",
      "\n",
      "RMSE on testing set =  1.6231884057971016\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(classification_report(odf_name[\"race_x\"],  odf_name[\"race_y\"]))\n",
    "print(\"RMSE on testing set = \", mean_squared_error(odf_name[\"race_x\"], odf_name[\"race_y\"]))\n",
    "\n",
    "cm = confusion_matrix(odf_name[\"race_x\"], odf_name[\"race_y\"], normalize='true')\n",
    "sns.heatmap(cm, annot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['api', 'black', 'hispanic', 'white']\n"
     ]
    }
   ],
   "source": [
    "df_name = pd.DataFrame(data_for_race_name)\n",
    "census = pred_census_ln(df_name, 'full_name')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "census['race_y'] = census['race_y'].map({\"white\" : 4, \"black\" : 1,\"hispanic\" : 2,\"api\" : 3})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8135526831179005"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_score(census[\"race_x\"], census[\"race_y\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           1       0.00      0.00      0.00       219\n",
      "           2       0.22      0.13      0.16       126\n",
      "           3       0.19      0.14      0.16        77\n",
      "           4       0.85      0.96      0.90      2131\n",
      "\n",
      "    accuracy                           0.81      2553\n",
      "   macro avg       0.31      0.31      0.31      2553\n",
      "weighted avg       0.72      0.81      0.76      2553\n",
      "\n",
      "RMSE on testing set =  1.0176263219741482\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(classification_report(census[\"race_x\"],  census[\"race_y\"]))\n",
    "print(\"RMSE on testing set = \", mean_squared_error(census[\"race_x\"], census[\"race_y\"]))\n",
    "\n",
    "cm = confusion_matrix(census[\"race_x\"], census[\"race_y\"], normalize='true')\n",
    "sns.heatmap(cm, annot=True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
